% !TEX program = xelatex
% !TEX encoding = utf-8

\section{SSD 原理}

\subsection{简介}

\begin{frame}
\frametitle{背景介绍}
\begin{enumerate}
    \item 基于 “Proposal + Classification” 的方法，R-CNN、SPPnet、Fast R-CNN 以及 Faster R-CNN，效果很好但速度较慢
    \item YOLO 能够达到实时的效果，但 mAP 较差，缺陷：每个网格只预测一个物体；对于物体的尺度相对比较敏感
    \item SSD 在这两方面都有所改进，同时兼顾 mAP 和实时性的要求
\end{enumerate}
\begin{figure}[H]
    \includegraphics[width=0.85\paperwidth]{2018/7-16/images/cmp}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{SSD 效果}
\begin{figure}[H]
    \includegraphics[width=0.9\paperwidth]{2018/7-16/images/rankssd}
\end{figure}
\begin{figure}[H]
    \includegraphics[width=0.85\paperwidth]{2018/7-16/images/ssdres}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{SSD 关键点}
{\LARGE
\begin{enumerate}
    \item 网络结构 \pause
    \item Multi-Scale Feature Maps
\end{enumerate}}
\end{frame}

\subsection{SSD 网络结构}

\begin{frame}
\frametitle{SSD 关键点}
{\LARGE
    \begin{enumerate}
        \item {\color{red} 网络结构}
        \item Multi-Scale Feature Maps
\end{enumerate}}
\end{frame}

\begin{frame}
\frametitle{以 VGG16 为基础的网络结构}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/ssdvgg}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{SSD 300 网络}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/ssd300}
    \label{ssd300}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{SSD 网络结构描述}
{\large \begin{enumerate}
    \item 使用 VGG16 网络结构的前 5 层次，然后利用 astrous 算法将 fc6 和 fc7 层转化成两个卷积层
    \item 再格外增加了 3 个卷积层，和一个 average pool 层 \pause
    \item 不同层次的 feature map 分别用于 default box 的偏移以及不同类别得分的预测
    \item 最后通过 NMS 得到最终的检测结果
\end{enumerate}}
\end{frame}

\subsection{Multi-Scale Feature Maps}

\begin{frame}
\frametitle{SSD 关键点}
{\LARGE
    \begin{enumerate}
        \item 网络结构
        \item {\color{red} Multi-Scale Feature Maps}
\end{enumerate}}
\end{frame}

\subsubsection{SSD 多尺度识别步骤}

\begin{frame}
\frametitle{Multi-Scale Feature Maps}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/msfm1}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{Multi-Scale Feature Maps}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/msfm2}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{Multi-Scale Feature Maps}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/msfm3}
\end{figure}
\end{frame}

\subsubsection{Default Box}

\begin{frame}
\frametitle{Default Box 设置}
SSD 利用不同层的 feature map 来模仿学习不同尺度下物体的检测：\pause
{\large \begin{enumerate}
    \item[scale] {假定使用 $m$ 个scale 来做预测，最小值为 $s_{min} = 0.2$，最大值的为 $s_{max} = 0.95$，其他通过下面公式计算得到：
     \[ s_k = s_{min} + \frac{s_{max} - s_{min}}{m - 1}(k-1), k \in [1,m] \]} \pause
    \item[ratio] {使用不同的 ratio 值如 $a_r \in \left\lbrace 1, 2, \frac{1}{2}, 3, \frac{1}{3} \right\rbrace$ 计算 default box 的宽度和高度：$w_k^{a} = s_k\sqrt{a_r}$，$h_k^{a} = s_k/\sqrt{a_r}$，当 ratio = 1 指定 scale 为 $s_k{'} = \sqrt{s_ks_{k+1}}$，即有 6 种不同的 default box。} \pause
    \item[中心] 每个 default box 的中心位置设置成  $( \frac{i+0.5}{|f_k|},\frac{j+0.5}{| f_k |})$ ，其中 $|f_k|$ 表示第 $k$ 个特征图的大小 $i,j \in [0, |f_k|)$ 。
\end{enumerate}}
\end{frame}

\subsubsection{多尺度识别细节}

\begin{frame}
\frametitle{多尺度识别过程}
\begin{columns}
    \column{0.65\textwidth}
    \begin{figure}[H]
        \centering
        \includegraphics[width=1.0\columnwidth]{2018/7-16/images/ssd-rpn}
    \end{figure}

    \column{0.4\textwidth}
    新增的 feature map，通道数为 $p$，Size 为 $m*n$，每个特征点对应 $k$ 个 default boxes，物体的类别数为 $c$：  \pause
    \begin{enumerate}
        \item 第一次卷积的通道数为 $p$，卷积核为 $3*3$，Padding 为 1  \pause
        \item 第二次卷积共需 $k(c+4)$ 个卷积滤波器，输出 $(m*n) *k* (c+4)$
    \end{enumerate}
\end{columns}
\end{frame}

\begin{frame}
\frametitle{多尺度识别过程细节}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/ssd_1}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{多尺度识别过程细节}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/ssd_2}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{多尺度识别过程细节}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/ssd_3}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{多尺度识别过程细节}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\paperwidth]{2018/7-16/images/ssd_4}
\end{figure}
\end{frame}

\subsubsection{Loss}

\begin{frame}
\frametitle{SSD 的 Loss}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\paperwidth]{2018/7-16/images/loss-ssd-faster-rcnn}
\end{figure}
目标函数，和常见的 Object Detection 的方法相同，分为两部分：
\begin{enumerate}
    \item 相应的 default box 与目标类别的 score (置信度)，采用 Softmax Loss
    \item 回归结果（位置回归）采用 Smooth L1 loss 
\end{enumerate}
\end{frame}

\begin{frame}
\frametitle{SSD 的 Loss}
目标函数：
\[ L(x,c,l,g)= \frac{1}{N}(L_{conf}(x,c) + \alpha L_{loc}(x,l,g)) \]
其中：$N$ 代表正样本的数目。位置损失的详细公式如下：
\[ L_{loc}(x,l,g)=\sum_{i \in Pos}^N \sum_{m \in \left\lbrace cx,cy,w,h\right\rbrace } x_{ij}^k \mathrm{smooth}_{L_1}(l_i^m - \hat{g}_j^m) \]
\[ 
\begin{array}{rl}
\hat{g}_j^{cx} = (g_j^{cx} - d_i^{cx})/d_i^w & \hat{g}_j^{cy} = (g_j^{cy} - d_i^{cy})/d_i^h \\
\hat{g}_j^{w} = \mathrm{log}(\frac{g_j^{w}}{d_i^w}) & \hat{g}_j^{h} = \mathrm{log}(\frac{g_j^{h}}{d_i^h})
\end{array}
\]
置信度损失的公式如下：
\[
L_{conf}(x,c) = -\sum_{i\in Pos}^N x_{ij}^p \mathrm{log}(\hat{c}_i^p) - \sum_{i\in Neg} \mathrm{log}(\hat{c}_i^0) \ \mathrm{where} \ \hat{c}_i^p = \frac{\mathrm{exp}(c_i^p)}{\sum_p \mathrm{exp}(c_i^p)}
\]
\end{frame}

\subsection{小结}

\begin{frame}
\frametitle{SSD 方法总结}
{\LARGE \begin{enumerate}
    \item 网络结构 \pause
    \item Multi-Scale Feature Maps \pause
    \item Default Box
\end{enumerate}}
\end{frame}